#ifndef WEATHERTOOL_H
#define WEATHERTOOL_H

#include <QJsonDocument>
#include <QJsonParseError>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
#include <map>
#include <QFile>
#include <QCoreApplication>


class WeatherTool
{
public:
    //此流程在Json文档中
    WeatherTool()
    {
        QString fileName = QCoreApplication::applicationDirPath();
        fileName += "/citycode-2019-08-23.json";//城市json,放在这里防止以后城市数据更新了，直接改这里就行
        QFile file(fileName);
        file.open(QIODevice::ReadOnly|QIODevice::Text);//打开这个json文件
        QByteArray json = file.readAll();//把数据读到这个Json  QByteArray中
        file.close();
        QJsonParseError err;
        QJsonDocument jsonDoc = QJsonDocument::fromJson(json, &err);//然后再丢这个JsonDoc 解析
        //这里应该要做特殊处理的

        //解析完成，就可以读取了
        QJsonArray citys = jsonDoc.array();
        for (int i = 0; i < citys.size(); i++)
        {
            QString code = citys.at(i).toObject().value("city_code").toString();//code为空的话，就是不存在，比如省，村
            QString city = citys.at(i).toObject().value("city_name").toString();
            if (code.size() > 0 )
                m_mapCity2Code.insert(std::pair<QString,QString>(city, code));//从Json读取的文件，依次插入到本地的map中
        }
    }
    //重载，传城市city，能拿到一个code
    QString operator[](const QString& city)
    {
        std::map<QString, QString>::iterator it = m_mapCity2Code.find(city);
        if (it == m_mapCity2Code.end())
        {
            //此时就是没有找到。但是也有可能输入错误，比如上海市，只输入了上海，那么加上市继续查找一边
            it = m_mapCity2Code.find(city + u8"市");//继续查找
        }
        if (it != m_mapCity2Code.end())
        {
            //找到了
            return it->second;
        }
        //没找到
        return "000000000";
    }
private:
    std::map<QString, QString> m_mapCity2Code;
};

#endif // WEATHERTOOL_H


















